public class AAAATest
{
    public static void main(String[] args)
    {
//        String[] words = {"abcw","baz","foo","bar","xtfn","abcdef"};
        String[] words = {"a","aa","aaa","aaaa"};
        int n = words.length, idx = 0;
        int[] masks = new int[n];
        for (String w : words) {
            int t = 0;
            for (int i = 0; i < w.length(); i++) {
                int u = w.charAt(i) - 'a';
                t |= (1 << u);
                //此处 用 或 一句话
                //妙处有3
                //其一，通过不断用新元素减去‘a'得出是第几个字母，然后向左移位（乘2），然后不断地或
                //此处用或 ，妙处为其二 或运算，如a对应的是0，a,一个0，aa，两个0，aaa，三个0
                //但是每个字母a对移位的影响都一样
                //这种或运算只统计一次，
                //每次乘2，妙处，不会重复
                //26个字母，最大的2的25次方  从2 到 2的25次方
                //你可能会觉得一个 b 移位一位 然后乘2 变成2
                //如果字符串是 bbc ，那么两个b会不会2+2等于 4抵消一个c位移两位的结果
                //告诉你不会的，因为或运算对
                // 2|2|4只统计一次2
            }
            masks[idx++] = t;
        }
        int j = 31;
        // 31 = 1+2+4+8+16
        // 用01 二进制表示  0001 1111
        System.out.println(j | 1);//与末尾1 或
        System.out.println(j | 2);//表示为0000  0010  与倒数第二个1

        System.out.println(j | 4);
        System.out.println(j | 8);
        System.out.println(j | 16);
//        System.out.println(j | 16);
        // 1或1 还是 1 ， 1或0，必定0
        //只有原来是 0 的位 你或进位为1的 ，才能输出
//        比如31或一个32 结果肯定是 63 ，给出一种相加的假象，最终底层是一二进制01码逐位或的

        System.out.println(31 | 32);
    }
}








